package modeles;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

public class Fournisseur {
	int fourn_id;
	String fourn_code;
	String fourn_nom;
	String fourn_adresse;
	String fourn_tel;
	
	public Fournisseur(){
		this.fourn_code = "";
		this.fourn_nom = "";
		this.fourn_tel = "";
	}
	
	public Fournisseur(int fourn_id, String fourn_code, String fourn_nom,
			String fourn_adresse, String fourn_tel) {
		super();
		this.fourn_id = fourn_id;
		this.fourn_code = fourn_code;
		this.fourn_nom = fourn_nom;
		this.fourn_adresse = fourn_adresse;
		this.fourn_tel = fourn_tel;
	}

	public int getFourn_id() {
		return fourn_id;
	}
	public void setFourn_id(int fourn_id) {
		this.fourn_id = fourn_id;
	}
	public String getFourn_code() {
		return fourn_code;
	}
	public void setFourn_code(String fourn_code) {
		this.fourn_code = fourn_code;
	}
	public String getFourn_nom() {
		return fourn_nom;
	}
	public void setFourn_nom(String fourn_nom) {
		this.fourn_nom = fourn_nom;
	}
	public String getFourn_adresse() {
		return fourn_adresse;
	}
	public void setFourn_adresse(String fourn_adresse) {
		this.fourn_adresse = fourn_adresse;
	}
	public String getFourn_tel() {
		return fourn_tel;
	}
	public void setFourn_tel(String fourn_tel) {
		this.fourn_tel = fourn_tel;
	}
	
	 public String NVLSqlStr(String objet){
	    	String result = "";
	    	result = "'"+objet+"'";
	    	return result;
	    }
	
	public int getMaxtypeFrsId (DBManager _dbManager)
	{
		int iMaxId = 0 ;
		boolean bIsCalled = true ;
		String zQuery = "SELECT LAST_VALUE, IS_CALLED FROM SEQ_ID_FOURNISSEUR" ;
		try
		{
			Statement oStmt = _dbManager.oStockDbCnx.createStatement () ;	
			ResultSet oRs = oStmt.executeQuery (zQuery) ;
			if (oRs.next ())
			{
				iMaxId = oRs.getInt ("LAST_VALUE") ;
				bIsCalled = oRs.getBoolean ("IS_CALLED") ;
				if (bIsCalled)//si deja utilisie dans la base de donnees
				{
					iMaxId++ ;
				}
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requÃªte !") ;
			_e.printStackTrace () ;
		}
		return iMaxId ;
	}
  	
  	 //enregistrment d'un produit
  	public boolean storeFournisseur (DBManager _dbManager)
  	{
  		boolean bRes = true;
  		String zQuery = "INSERT INTO \"FOURNISSEUR\" (fourn_id,fourn_code,fourn_nom,fourn_adresse,fourn_tel) VALUES (nextval('seq_id_fournisseur'), " ;
  		zQuery +=  NVLSqlStr(this.getFourn_code()) + ", " ;
  		zQuery +=  NVLSqlStr(this.getFourn_nom()) + ", " ;
  		zQuery +=  NVLSqlStr(this.getFourn_adresse()) + ", " ;
  		zQuery +=  NVLSqlStr(this.getFourn_tel()) + ") " ;
  		
  		try
  		{
  			Statement oStmt = _dbManager.oStockDbCnx.createStatement () ;	
  			oStmt.executeUpdate (zQuery) ;
  		}
  		catch (SQLException _e)
  		{
  			System.out.println ("Erreur interne pendant la mise Ã  jour !") ;
  			bRes = false;
  			_e.printStackTrace () ;
  		}

  		return bRes;
  		
  	}
  	
  	public Vector<Fournisseur> getListFournisseur(DBManager _dbManager){
  		Vector<Fournisseur> listFrs = new Vector<Fournisseur>();
    	String zQuery = "SELECT * FROM \"FOURNISSEUR\" order by fourn_nom ASC";
    	
		try
		{
			Statement oStmtFrs = (Statement) _dbManager.oStockDbCnx.createStatement () ;	
			ResultSet oRsFrs = (ResultSet) oStmtFrs.executeQuery (zQuery) ;
			while (oRsFrs.next ())
			{
				Fournisseur oFournisseur = new Fournisseur();
				
				oFournisseur.setFourn_id(oRsFrs.getInt("fourn_id"));
				oFournisseur.setFourn_code(oRsFrs.getString("fourn_code"));
				oFournisseur.setFourn_nom(oRsFrs.getString("fourn_nom"));
				oFournisseur.setFourn_adresse(oRsFrs.getString("fourn_adresse"));
				oFournisseur.setFourn_tel(oRsFrs.getString("fourn_tel"));
				
				listFrs.add(oFournisseur);
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return listFrs;
  	}
	
  	public boolean updateProfilFrs(DBManager _dbManager){
  		boolean bRes = true;
  		String zQuery = "UPDATE \"FOURNISSEUR\"  " ;
  		zQuery += "set fourn_nom = "+ NVLSqlStr(this.getFourn_nom()) + ", " ;
  		zQuery += "fourn_adresse = "+ NVLSqlStr(this.getFourn_adresse()) + ", " ;
  		zQuery +=  "fourn_tel = "+NVLSqlStr(this.getFourn_tel()) + " where fourn_code =  "+ NVLSqlStr(this.getFourn_code()) ;
  		
  		try
  		{
  			Statement oStmt = _dbManager.oStockDbCnx.createStatement () ;	
  			oStmt.executeUpdate (zQuery) ;
  		}
  		catch (SQLException _e)
  		{
  			System.out.println ("Erreur interne pendant la mise Ã  jour !") ;
  			bRes = false;
  			_e.printStackTrace () ;
  		}
  		return bRes;
  	}
  	//supprimer les infos sur les produits offerts par le fournisseur
  	public boolean deleteAllProduct(DBManager _dbManager){
		boolean bRes = true;
		String zQueryAgent = "delete from \"INFOPROD\" where fourn_id = "+this.fourn_id;
		try
	 	{
	 		Statement oStmtVendeur = (Statement) _dbManager.oStockDbCnx.createStatement () ;	
	 		oStmtVendeur.executeUpdate(zQueryAgent) ;
	 		
	 		
	 	}
	 	catch (SQLException _e)
	 	{
	 		System.out.println ("Erreur interne pendant la requete !") ;
	 		_e.printStackTrace () ;
	 		bRes = false;
	 	}
		return bRes;
	}
  	
  	//liste des produits offerts par le fournisseur
  	public Vector<InfoProduit> getListProduitFrs(DBManager _dbManager){
  		Vector<InfoProduit> listProdFrs = new Vector<InfoProduit>();
    	String zQuery = "SELECT * FROM \"INFOPROD\" where fourn_id = "+this.fourn_id;
    	
		try
		{
			Statement oStmtFrs = (Statement) _dbManager.oStockDbCnx.createStatement () ;	
			ResultSet oRsFrs = (ResultSet) oStmtFrs.executeQuery (zQuery) ;
			while (oRsFrs.next ())
			{
				InfoProduit oInfoProduit = new InfoProduit();
				
				oInfoProduit.setInfoProd_id(oRsFrs.getInt("infoprod_id"));
				oInfoProduit.setFourn_id(oRsFrs.getInt("fourn_id"));
				oInfoProduit.setProduit_id(oRsFrs.getInt("produit_id"));
				oInfoProduit.setPrix_achat(oRsFrs.getInt("prix_achat"));
				
				
				listProdFrs.add(oInfoProduit);
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return listProdFrs;
  	}
}
